
const http = require('http')
const fs = require('fs')
// url 库：解析 request.url，分为：hostname/pathname/query
const url = require('url')
// querystring 库：解析 url 的入参 query
const querystring = require('querystring')
const game = require('../commonJS/gameLib')

/*
 * 基于原生 http 实现 石头剪刀布 的游戏
 * - 原生的 http 请求，所有内容都在一个 http.create 中（会用到 express 来优化）
 */

// 玩家胜率次数，如果超过 3，则后续服务器的请求都返回 500
var playWinCount = 0
// 玩家上一次游戏动作
var lastPlayAction = null
// 玩家连续出同一动作的次数，如果超过 3 次，服务器返回 400
var sameCount = 0

http.createServer(function(req, res) {
    const parseUrl = url.parse(req.url)
    if (parseUrl.pathname == '/favicon.ico') {
        res.writeHead(200)
        res.end()
        return;
    }

    if (parseUrl.pathname == '/') {
        fs.createReadStream(__dirname + '/game.html').pipe(res)
        return
    }

    // 游戏的逻辑
    if (parseUrl.pathname == '/game') {
        const query = querystring.parse(parseUrl.query)
        const playAction = query.action

        // logci 1：连赢 3 次 或是触发了 3 次出同样的操作
        if (playWinCount >= 3 || sameCount == 99) {
            res.writeHead(500)
            res.end('你耍赖，我再也不和你玩了~~~')
            return
        }

        // logci 2：连续 3 次出同一个操作
        if (lastPlayAction && lastPlayAction == playAction) {
            sameCount++
        }else {
            sameCount = 0
        }
        lastPlayAction = playAction
        if (sameCount >= 3) {
            res.writeHead(400)
            res.end('没意思，不许出一样的~~~')
            sameCount = 99
            return;
        }

        // 正常逻辑
        const gameResult = game(playAction)
        res.writeHead(200)
        if (gameResult == 0) {
            res.end('平局！')
        }else if (gameResult == -1) {
            playWinCount++
            res.end('你赢了！')
        }else {
            res.end('你输了！')
        }
    }

}).listen(3000)
